/**
 * JDEcrireMessage.java    27/03/2012
 */

package l3.info.Projet.Client;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

/**
 * JDialog permettant d'écrire un message
 * @author Loïc Martinez
 * @version 1.0
 */

public class JDEcrireMessage extends JDialog implements ActionListener {

	
	private final static String TITRE = "Ecriture d'un message...";
	private final static String ENVOYER = "Envoyer";
	private final static String ANNULER = "Annuler";
	// TODO : Modifier les valeurs
	private final static int LARGEUR = 500;
	private final static int HAUTEUR = 445;
	private final static int ABSCISSE = 480;
	private final static int ORDONNEE = 150;
	private final static String MESSAGE = "Veuillez écrire votre " +
			"message ci-dessous";
	
	private JLabel label;
	private JButton boutonEnvoyer, boutonAnnuler;
	private JPanel panLabel, panArea, panBouton;
	private JTextArea champ;
	private JScrollPane scroll;
	
	/**
	 * Pour savoir si on a appuyé sur envoyer ou annuler
	 * pour la fenêtre parente
	 */
	private boolean envoi = false;
	
	/**
	 * Constructeur
	 * @param erreur, le message à afficher
	 */
	public JDEcrireMessage() {
		setProperties();
		addComponents(FlowLayout.CENTER);
		setEnter();
		setVisible(true);
	}

	/**
	 * Configuration des propriétés de la JFrame
	 */
	private void setProperties() {
		setTitle(TITRE);
		setBounds(ABSCISSE, ORDONNEE, LARGEUR, HAUTEUR);
		setResizable(false);
		setModal(true);
		getContentPane().setLayout(new FlowLayout());
		setDefaultCloseOperation(DISPOSE_ON_CLOSE);
	}

	/**
	 * Ajout du label et du bouton
	 * @param alignement, la position des éléments
	 * @param erreur, la valeur du JLabel
	 */
	private void addComponents(int alignement) {
		panLabel = new JPanel(new FlowLayout(alignement));
		panLabel.setPreferredSize(new Dimension(LARGEUR, 30));
		label = new JLabel(MESSAGE);
		panLabel.add(label);
		add(panLabel);

		panArea = new JPanel(new FlowLayout(alignement));
		panArea.setPreferredSize(new Dimension(LARGEUR, 330));
		
		champ = new JTextArea(20, 42);
		champ.setBorder(BorderFactory.createLineBorder(Color.BLACK));
		champ.setLineWrap(true);
		
		scroll = new JScrollPane(champ);
		scroll.setHorizontalScrollBarPolicy(
				JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
		
		panArea.add(scroll);
		add(panArea);
		
		panBouton = new JPanel(new FlowLayout(alignement));
		panBouton.setPreferredSize(new Dimension(LARGEUR, 50));
		boutonEnvoyer = new JButton(ENVOYER);
		boutonEnvoyer.addActionListener(this);
		boutonAnnuler = new JButton(ANNULER);
		boutonAnnuler.addActionListener(this);
		panBouton.add(boutonEnvoyer);
		panBouton.add(boutonAnnuler);
		add(panBouton);
	}

	/**
	 * Valeur de la JTextArea
	 * @return la valeur de la JTextArea sans les espaces avant et
	 * après la chaîne
	 */
	public String getText() {
		return champ.getText().trim();
	}
	
	/**
	 * On a appuyé sur envoyer et pas annuler
	 * @return envoi, true si on a appuyé sur envoyer,
	 *                false sinon
	 */
	public boolean isEnvoye() {
		return envoi;
	}
	
	/**
	 * Si on appuie sur Entrée, alors ça déclenche le listener
	 * du bouton bouton
	 */
	public void setEnter() {
		getRootPane().setDefaultButton(boutonEnvoyer);
	}

	/**
	 * Permet de gérer les actions sur les ActionListeners
	 */
	public void actionPerformed(ActionEvent ev) {
		if (ev.getSource() == boutonEnvoyer) {
			envoi = true;
			setVisible(false);
			dispose();
		} else if (ev.getSource() == boutonAnnuler) {
			// envoi = false
			setVisible(false);
			dispose();
		}
	}
}
